#ifndef _M_MUTEX_H_
#define _M_MUTEX_H_
#include "m_types.h"
#include "m_errno.h"
#include "inner/mutex_for_pico.h"

/**
 * MMutex 互斥锁对象结构体
 */
typedef struct MMutexTag
{
    mutex_t mutex;
    Bool is_init;
} MMutex;

/**
 * @brief 创建互斥锁
 * @param self: 互斥锁对象
 * @return 执行结果，详见 MErrCode
 */
Int32 MMutexCreate(MMutex *self);

/**
 * @brief 销毁互斥锁
 * @param self: 互斥锁对象
 * @return 执行结果，详见 MErrCode
 */
Int32 MMutexDestory(MMutex *self);

/**
 * @brief 进入临界区，阻塞取锁
 * @note 需先 MMutexCreate
 * @param self: 互斥锁对象
 * @return Bool 执行结果
 */
Bool MMutexEnter(MMutex *self);

/**
 * @brief 离开临界区，释放锁
 * @note 需先 MMutexCreate
 * @param self: 互斥锁对象
 * @return void
 */
void MMutexLeave(MMutex *self);

#endif // _M_MUTEX_H_
